/*
 * ControllerFactory.h - Grupo 5 - Prog. Avanzada 2011
 *
 *  Javier Dominguez - 4.901.161-6
 *  Marcelo Parada - 1.977.094-9
 *  Rodrigo Ruiz - 4.481.611-2
 *  Maximiliano Silvera - 4.106.938-6
 */

#ifndef CONTROLLERFACTORY_H_
#define CONTROLLERFACTORY_H_

#include "../logica/ICompartirPistaAlbum.h"
#include "../logica/CCompartirPistaAlbum.h"

#include "../logica/ICompartirTemaSingle.h"
#include "../logica/CCompartirTemaSingle.h"

#include "../logica/IConsultarInformacionTema.h"
#include "../logica/CConsultarInformacionTema.h"

#include "../logica/IEliminarTema.h"
#include "../logica/CEliminarTema.h"

#include "../logica/IEtiquetarElemento.h"
#include "../logica/CEtiquetarElemento.h"

#include "../logica/IRegistroUsuario.h"
#include "../logica/CRegistroUsuario.h"

#include "../logica/IReproducirTema.h"
#include "../logica/CReproducirTema.h"

class ControllerFactory
{
private:
	ControllerFactory();

	static ControllerFactory* instance;

	ICompartirPistaAlbum* compartirPistaAlbumController;

	ICompartirTemaSingle* compartirTemaSingleController;

	IConsultarInformacionTema* consultarInformacionTemaController;

	IEliminarTema* eliminarTemaController;

	IEtiquetarElemento* etiquetarElementoController;

	IRegistroUsuario* registroUsuarioController;

	IReproducirTema* reproducirTemaController;

public:
	virtual ~ControllerFactory();

	static ControllerFactory* getInstance();

    virtual ICompartirPistaAlbum* getCompartirPistaAlbumController() const;

    virtual ICompartirTemaSingle* getCompartirTemaSingleController() const;

    virtual IConsultarInformacionTema* getConsultarInformacionTemaController() const;

    virtual IEliminarTema* getEliminarTemaController() const;

    virtual IEtiquetarElemento* getEtiquetarElementoController() const;

    virtual IRegistroUsuario* getRegistroUsuarioController() const;

    virtual IReproducirTema* getReproducirTemaController() const;
};

#endif /* CONTROLLERFACTORY_H_ */
